# 题19
# 3级

# 题：您需要编写一个程序，按升序对（名称，年龄，高度）元组进行排序，其中name是字符串，age和height是数字。 元组由控制台输入。 排序标准是：
# 1：根据名称排序;
# 2：然后根据年龄排序;
# 3：然后按分数排序。
# 优先级是name> age>得分。
# 如果给出以下元组作为程序的输入：
# Tom,19,80
# John,20,90
# Jony,17,91
# Jony,17,93
# Json,21,85
# 然后，程序的输出应该是：
# [（'John'，'20'，'90'），（'Jony'，'17'，'91'），（'Jony'，'17'，'93'），（'Json'，'21 '，'85'），（'Tom'，'19'，'80'）]

# 提示：如果输入数据被提供给问题，则应该假定它是控制台输入。我们使用itemgetter来启用多个排序键。

# 解：

# 解题思路：
# 前面排序都是用的sort函数，这里尝试一下用sorted函数， sorted函数是会返回一个新的排序后的变量的
# 上面排序顺序应该是可以根据lambda，匿名函数来进行决定的
# 上面使用itemgetter来启用多个排序键。

# note
# operator.itemgetter函数获取的不是值，而是定义了一个函数，通过该函数作用到对象上才能获取值。
# sorted函数用来排序，sorted(iterable[, cmp[, key[, reverse]]])
# 其中key的参数为一个函数或者lambda函数。所以itemgetter可以用来当key的参数

# lambda函数用法例如 X = [(3,4), (1,2)]   sorted(X, key = lambda Acc:Acc[0])  
# Acc则代表每个元素，这里是(3,4) 或 (1,2),以元组第一个元素来排序， 即用3，和1这两个值去排序这个元组列表

# itemgetter返回函数用法例如 
# 首先介绍itemgetter用法例子
# a = [1,2,3] 
# >>> b=operator.itemgetter(1,0)  //定义函数b，获取对象的第1个域和第0个的值
# >>> b(a)  // 把原来的变量a作为参数，定义了b函数，获取的是a的(1和0的值，按顺序)，则在调用b函数传入a为实参的时候
# 获取到的是a的第1个值 和 a的第0个值的一个元组
# (2, 1)
#sorted中key使用的实例 sorted(students, key=operator.itemgetter(1,2))

from operator import itemgetter

if __name__ == '__main__':
    TupleList = []
    while True:
        InputData = input()
        if InputData:
            AddData = tuple(InputData.split(','))
            TupleList.append(AddData)
        else:
            break
    
    print(sorted(TupleList, key = itemgetter(0, 1, 2)))  

